package samfeng.erp.quant.dal.mysql;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import samfeng.erp.quant.controller.admin.vo.QuantExportReqVO;
import samfeng.erp.quant.controller.admin.vo.QuantPageReqVO;
import samfeng.erp.quant.controller.admin.vo.StockQuantSummarizingPageReqVO;
import samfeng.erp.quant.dal.dataobject.QuantDO;

/**
 * 仓库计算记录 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface QuantMapper extends BaseMapperX<QuantDO> {

    default PageResult<QuantDO> selectPage(QuantPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<QuantDO>()
                .betweenIfPresent(QuantDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(QuantDO::getProductUomId, reqVO.getProductUomId())
                .eqIfPresent(QuantDO::getProductId, reqVO.getProductId())
                .eqIfPresent(QuantDO::getLastCategoryId, reqVO.getLastCategoryId())
                .eqIfPresent(QuantDO::getWarehouseId, reqVO.getWarehouseId())
                .eqIfPresent(QuantDO::getLocationId, reqVO.getLocationId())
                .eqIfPresent(QuantDO::getQuantity, reqVO.getQuantity())
                .eqIfPresent(QuantDO::getReservedQuantity, reqVO.getReservedQuantity())
                .eqIfPresent(QuantDO::getAvailableQuantity, reqVO.getAvailableQuantity())
                .eqIfPresent(QuantDO::getInventoryQuantity, reqVO.getInventoryQuantity())
                .eqIfPresent(QuantDO::getInventoryDiffQuantity, reqVO.getInventoryDiffQuantity())
                .betweenIfPresent(QuantDO::getInventoryDate, reqVO.getInventoryDate())
                .orderByDesc(QuantDO::getId));
    }

    PageResult<StockQuantSummarizingPageReqVO> selectStockQuantSummarizingPage(StockQuantSummarizingPageReqVO stockQuantSummarizingPageReqVO);

    default List<QuantDO> selectList(QuantExportReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<QuantDO>()
                .betweenIfPresent(QuantDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(QuantDO::getProductUomId, reqVO.getProductUomId())
                .eqIfPresent(QuantDO::getProductId, reqVO.getProductId())
                .eqIfPresent(QuantDO::getLastCategoryId, reqVO.getLastCategoryId())
                .eqIfPresent(QuantDO::getWarehouseId, reqVO.getWarehouseId())
                .eqIfPresent(QuantDO::getLocationId, reqVO.getLocationId())
                .eqIfPresent(QuantDO::getQuantity, reqVO.getQuantity())
                .eqIfPresent(QuantDO::getReservedQuantity, reqVO.getReservedQuantity())
                .eqIfPresent(QuantDO::getAvailableQuantity, reqVO.getAvailableQuantity())
                .eqIfPresent(QuantDO::getInventoryQuantity, reqVO.getInventoryQuantity())
                .eqIfPresent(QuantDO::getInventoryDiffQuantity, reqVO.getInventoryDiffQuantity())
                .betweenIfPresent(QuantDO::getInventoryDate, reqVO.getInventoryDate())
                .orderByDesc(QuantDO::getId));
    }

}
